package com.leezai.mqtt.utils;

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * 下班时间计算器工具类
 */
public class OffWorkTimeCalculator {

    // 默认下班时间：18:00
    private static final LocalTime DEFAULT_OFF_WORK_TIME = LocalTime.of(18, 0);

    /**
     * 计算当前时间到下班时间的剩余时间
     *
     * @return 剩余时间字符串，格式为 "xx小时xx分钟"
     */
    public static String getTimeToOffWork() {
        return getTimeToOffWork(DEFAULT_OFF_WORK_TIME);
    }

    /**
     * 计算当前时间到指定下班时间的剩余时间
     *
     * @param offWorkTime 下班时间
     * @return 剩余时间字符串，格式为 "xx小时xx分钟"
     */
    public static String getTimeToOffWork(LocalTime offWorkTime) {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime offWorkDateTime = LocalDateTime.of(LocalDate.now(), offWorkTime);

        // 如果当前时间已经过了下班时间，则返回0
        if (now.isAfter(offWorkDateTime)) {
            return "0小时0分钟";
        }

        Duration duration = Duration.between(now, offWorkDateTime);
        long hours = duration.toHours();
        long minutes = duration.minusHours(hours).toMinutes();

        return hours + "小时" + minutes + "分钟";
    }

    /**
     * 判断当前是否已经下班
     *
     * @return true表示已下班，false表示未下班
     */
    public static boolean isOffWork() {
        return isOffWork(DEFAULT_OFF_WORK_TIME);
    }

    /**
     * 判断当前时间是否已经超过指定下班时间
     *
     * @param offWorkTime 下班时间
     * @return true表示已下班，false表示未下班
     */
    public static boolean isOffWork(LocalTime offWorkTime) {
        return LocalTime.now().isAfter(offWorkTime);
    }

    public static void main(String[] args) {
        // 示例用法
        System.out.println("距离下班还有: " + getTimeToOffWork());

        // 指定下班时间的示例
        LocalTime customOffWorkTime = LocalTime.of(18, 0);
        System.out.println("距离18:00下班还有: " + getTimeToOffWork(customOffWorkTime));

        if (isOffWork()) {
            System.out.println("已经下班了！");
        } else {
            System.out.println("还在上班中...");
        }
    }
}

